// 小U是一位电脑外壳供应商，而小S是一位电脑零件供应商。
// 他们想要合作组装电脑。
// 小U生产了 n 个电脑外壳，每个外壳的售价是 ai，
// 而小S生产了 n 个电脑零件，每个零件的售价是 bi。
// 当一个外壳与一个零件配对时，电脑的售价是外壳售价与零件售价的和。
// 他们需要找出一些外壳和零件的配对，使得这些配对形成的电脑售价全部相同，问最多可以组装多少部售价相同的电脑？

function solution(n, a, b) {
    let maxCount = 0;

    // 遍历所有可能的总价 target（外壳与零件的和）
    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            let target = a[i] + b[j];  // 计算当前的目标总价
            let count = 0;

            // 排序外壳和零件
            let sortedA = [...a].sort((x, y) => x - y);
            let sortedB = [...b].sort((x, y) => x - y);

            // 使用双指针方法查找配对
            let left = 0, right = n - 1;

            let usedA = Array(n).fill(false);  // 标记外壳是否被使用
            let usedB = Array(n).fill(false);  // 标记零件是否被使用

            while (left < n && right >= 0) {
                if (sortedA[left] + sortedB[right] === target && !usedA[left] && !usedB[right]) {
                    // 找到配对，更新计数器
                    count++;
                    usedA[left] = true;
                    usedB[right] = true;
                    left++;
                    right--;
                } else if (sortedA[left] + sortedB[right] < target) {
                    // 如果总价小于目标，左指针右移
                    left++;
                } else {
                    // 如果总价大于目标，右指针左移
                    right--;
                }
            }

            // 更新最大配对数量
            maxCount = Math.max(maxCount, count);
        }
    }

    return maxCount;
}

function main() {
    console.log(solution(4, [1, 2, 3, 4], [1, 2, 4, 5]) === 3);  // 3
    console.log(solution(3, [1, 1, 2], [2, 2, 3]) === 2);  // 2
    console.log(solution(5, [5, 5, 5, 5, 5], [1, 2, 3, 4, 5]) === 1);  // 1
}

main();
